"""
qa 模块
"""
"""问答功能相关API接口"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import List, Dict, Optional
from config.app_config import get_app_config
# 新增：导入实际的问答服务（适配项目现有结构）
from src.qa_chain.qa_service import QAService

# 关键：定义APIRouter实例，添加标签与现有接口风格统一
router = APIRouter(tags=["问答功能"])

# 初始化问答服务（单例模式，避免重复加载模型）
qa_service = QAService()


# 定义请求体模型（用户提问的格式）
class QuestionRequest(BaseModel):
    question: str  # 用户的问题
    top_k: Optional[int] = 3  # 检索相关文档的数量（可选，默认3）


# 定义响应体模型（回答的格式）
class AnswerResponse(BaseModel):
    answer: str  # 生成的回答
    related_docs: List[str]  # 相关文档的片段（用于溯源）
    success: bool = True  # 处理状态


@router.post("/query", response_model=AnswerResponse, summary="获取知识库问答结果")
def handle_question(request: QuestionRequest) -> AnswerResponse:
    """
    处理用户的问答请求：
    1. 检索与问题相关的文档片段
    2. 结合文档生成精准回答
    3. 返回回答及相关文档参考
    """
    try:
        # 替换模拟逻辑为实际调用问答服务
        result = qa_service.query(
            question=request.question,
            top_k=request.top_k
        )
        if not result["success"]:
            raise HTTPException(status_code=500, detail=result["answer"])
        return AnswerResponse(
            answer=result["answer"],
            related_docs=result["related_docs"],
            success=result["success"]
        )
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"问答处理失败：{str(e)}")


@router.get("/config", response_model=Dict[str, int], summary="获取问答默认配置")
def get_qa_default_config() -> Dict[str, int]:
    """获取问答功能的默认配置（如默认检索数量）"""
    config = get_app_config()
    return {
        "default_top_k": config.qa_config.default_top_k,  # 从配置读取，不再硬编码
        "max_top_k": 10,
        "chunk_size": config.chunk_size  # 关联文档切片大小
    }
